package com.tulingxueyuan.mall.modules.pms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tulingxueyuan.mall.dto.AttrWithCidDTO;
import com.tulingxueyuan.mall.modules.pms.model.PmsProductAttribute;
import com.tulingxueyuan.mall.modules.pms.mapper.PmsProductAttributeMapper;
import com.tulingxueyuan.mall.modules.pms.model.PmsProductAttributeCategory;
import com.tulingxueyuan.mall.modules.pms.service.PmsProductAttributeCategoryService;
import com.tulingxueyuan.mall.modules.pms.service.PmsProductAttributeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 商品属性参数表 服务实现类
 * </p>
 *
 * @author XuShu
 * @since 2023-05-08
 */
@Service
public class PmsProductAttributeServiceImpl extends ServiceImpl<PmsProductAttributeMapper, PmsProductAttribute> implements PmsProductAttributeService {

    @Resource
    private PmsProductAttributeCategoryService pmsProductAttributeCategory;
    @Resource
    private PmsProductAttributeMapper pmsProductAttributeMapper;
    @Override
    public Page listPage(Integer cid, Integer type, Integer pageNum, Integer pageSize) {
        Page<PmsProductAttribute> pageInfo = new Page<>(pageNum,pageSize);
        LambdaQueryWrapper<PmsProductAttribute> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(PmsProductAttribute::getProductAttributeCategoryId,cid)
                .eq(PmsProductAttribute::getType,type)
                .orderByDesc(PmsProductAttribute::getSort);
        this.page(pageInfo,wrapper);
        return pageInfo;
    }

    @Override
    public boolean add(PmsProductAttribute pmsProductAttribute) {
//        先添加
        boolean b = this.save(pmsProductAttribute);
        LambdaUpdateWrapper<PmsProductAttributeCategory> wrapper = new LambdaUpdateWrapper<>();
//        在修改属性或者参数数量
//        添加成功
        if (b){
//            属性
            if (pmsProductAttribute.getType() == 0){
                wrapper.setSql("attribute_count = attribute_count+1")
                        .eq(PmsProductAttributeCategory::getId,pmsProductAttribute.getProductAttributeCategoryId());
            }
//             参数
            else if ((pmsProductAttribute.getType() == 1)){
                wrapper.setSql("param_count_count = param_count+1")
                        .eq(PmsProductAttributeCategory::getId,pmsProductAttribute.getProductAttributeCategoryId());
            }
           return pmsProductAttributeCategory.update(wrapper);
        }
        return false;
    }

    @Override
    public boolean delete(List<Long> ids) {
        PmsProductAttribute pmsProductAttribute = null;
//        先查改属性或者参数
        for (Long id : ids) {
            pmsProductAttribute = this.getById(id);
            if (pmsProductAttribute != null){
                break;
            }
        }
//        执行删除
        int i = pmsProductAttributeMapper.deleteBatchIds(ids);
//        在执行修改分类的属性或者参数数量
        if (i>0 && pmsProductAttribute!=null){
            LambdaUpdateWrapper<PmsProductAttributeCategory> wrapper = new LambdaUpdateWrapper<>();

            //            属性
            if (pmsProductAttribute.getType() == 0){
                wrapper.setSql("attribute_count = attribute_count-"+i)
                        .eq(PmsProductAttributeCategory::getId,pmsProductAttribute.getProductAttributeCategoryId());
            }
//             参数
            else if ((pmsProductAttribute.getType() == 1)){
                wrapper.setSql("param_count_count = param_count-"+i)
                        .eq(PmsProductAttributeCategory::getId,pmsProductAttribute.getProductAttributeCategoryId());
            }
            return pmsProductAttributeCategory.update(wrapper);
        }
        return false;
    }

    @Override
    public List<AttrWithCidDTO> getAttrWithList(Integer cid) {
        List<AttrWithCidDTO> list =  pmsProductAttributeMapper.getAttrWithList(cid);
        return list;
    }
}
